package pyip.lib.mixtool.util;

import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.UUID;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * 说明：文本工具类
 * @author shiw
 *         2014年7月19日
 */
public class TextUtil {
    private static final String PASSWORD_KEY = "2ea5f&#2asf!1";

    /**
     * 说明：Md5加密
     * @author shiw
     *         2014年7月19日
     * @param text
     * @return
     * @throws Exception
     */
    public static String md5(String text) throws Exception {
        MessageDigest alg = MessageDigest.getInstance("MD5");
        alg.update(text.getBytes());
        byte[] digesta = alg.digest();
        return byte2Hex(digesta);
    }

    /**
     * 说明：转换成16进制
     * @author shiw
     *         2014年7月19日
     * @param paramArrayOfByte
     * @return
     */
    public static String byte2Hex(byte[] buf) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < buf.length; i++) {
            String hex = Integer.toHexString(buf[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }

    /**
     * 说明：16进制转BYTE
     * @author shiw
     *         2014年7月19日
     * @param hexStr
     * @return
     */
    public static byte[] hex2byte(String hexStr) {
        if (hexStr.length() < 1)
            return null;
        byte[] result = new byte[hexStr.length() / 2];
        for (int i = 0; i < hexStr.length() / 2; i++) {
            int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
            result[i] = (byte) (high * 16 + low);
        }
        return result;
    }

    /**
     * 说明：获取AES密码KEY
     * @author shiw
     *         2014年7月19日
     * @return
     * @throws Exception
     */
    private static SecretKeySpec getKey() throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        kgen.init(128, new SecureRandom(PASSWORD_KEY.getBytes()));
        SecretKey secretKey = kgen.generateKey();
        byte[] enCodeFormat = secretKey.getEncoded();
        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
        return key;
    }

    /**
     * 说明：AES加密
     * @author shiw
     *         2014年7月19日
     * @param text
     * @return
     */
    public static String encrypt(String text) throws Exception {
        String result = "";
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, getKey());
        byte[] textByte = cipher.doFinal(text.getBytes("UTF-8"));
        result = byte2Hex(textByte);
        return result;
    }

    /**
     * 说明：AES解密
     * @author shiw
     *         2014年7月19日
     * @param text
     * @return
     */
    public static String decrypt(String text) throws Exception {
        String result = "";
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, getKey());
        byte[] textByte = cipher.doFinal(hex2byte(text));
        result = new String(textByte);
        return result;
    }

    /**
     * 说明：获取UUID
     * @return
     */
    public static synchronized String getUUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    public static boolean startsWithIgnoreCase(String line, String starts) {
        if (line.matches("^(?i)" + starts + ".*")) {
            return true;
        }
        return false;
    }

}
